$(document).ready(function() {
    $(".skuselect > li > a").click(function() {  // 商品sku选择，价格变动，样式变动

        if ($(this).parent("li").hasClass("selected")) {
            $(this).parent("li").removeClass("selected");
        } else {
            $(this).parents("li").siblings("li").removeClass("selected");  //选中一个属性分类时，移除同级样式
            $(this).parent("li").addClass("selected");
        }

        var skuvalueid = $(".tb-sku").find("li.selected a");  //每次点击，将所有选中的属性放入对象
        if (skuvalueid.length > 0) {
            skuquantity = SKUResult[skuvalueid.attr("skuvalueid")]['prices']['quantity'];
            $("#skuprice").html(SKUResult[skuvalueid.attr("skuvalueid")]['prices']['skuPrice']);
            $(".now-quantity").html(skuquantity);
            $(".sku-id").val(SKUResult[skuvalueid.attr("skuvalueid")]['prices']['id']);
            var cknewnum = $("input.buy-num[type='text']").val();
            if (parseInt(cknewnum) > skuquantity) {
                $("input.buy-num[type='text']").val(skuquantity);
                if (skuquantity <= 1) {
                    $(".less,.incr").addClass('off');
                }
            } else if (parseInt(cknewnum) < skuquantity && parseInt(cknewnum) == 0) {
                $("input.buy-num[type='text']").val('1');
                $(".incr").removeClass('off');
            }
        } else {
            skuquantity = quantity;
            $(".now-quantity").html(skuquantity);
            $("#skuprice").html(oldprice);
            $(".sku-id").val(0);
        }
    });

    $(".less,.incr").click(function() {  //商品数量
        if ($(this).hasClass("off") == false) {

            var oldcount = $(this).siblings("input[type='text']").val();
            var skuvalueid = $(".tb-sku").find("li.selected a").attr('skuvalueid');

            if ($(this).hasClass("incr") == true) {
                $(this).siblings("input[type='text']").val(parseInt(oldcount) + 1);
            } else if ($(this).hasClass("less") == true) {
                $(this).siblings("input[type='text']").val(parseInt(oldcount) - 1);
            }
            var newcount = $(this).siblings("input[type='text']").val();

            if (parseInt(newcount) > 1 && parseInt(newcount) < skuquantity) {
                $(this).siblings("a").removeClass('off');
            } else {
                $(this).addClass('off');
            }
        }
    });

    $(".less_incr_amound").change(function() {
        var newcount = $(".less_incr_amound").val();
        if (parseInt(newcount) <= 1) {
            if (parseInt(newcount) >= parseInt(skuquantity)) {
//                console.log(skuquantity+1);
                $(this).val(skuquantity);
                $(this).siblings(".incr").addClass("off");
                $(this).siblings(".less").addClass("off");
            } else {
//                console.log(skuquantity+2);
                $(this).val(1);
                $(this).siblings(".less").addClass("off");
//                $(this).siblings(".incr").removeClass("off");
            }
//            $(this).val(1);
//            $(this).siblings(".less").addClass("off");
        } else if (parseInt(newcount) > 1) {
            if (parseInt(newcount) >= parseInt(skuquantity)) {
                $(this).val(skuquantity);
                if (parseInt(skuquantity) == 0 || parseInt(skuquantity) == 1) {
                    $(this).siblings(".less").addClass("off");
                    $(this).siblings(".incr").addClass("off");
                } else {
                    $(this).siblings(".less").removeClass("off");
                    $(this).siblings(".incr").addClass("off");
                }
            } else {
                $(this).val(newcount);
                $(this).siblings(".less").removeClass("off");
                $(this).siblings(".incr").removeClass("off");
            }
        }
    });
});

//获得对象的key
function getObjKeys(obj) {
    if (obj !== Object(obj))
        throw new TypeError('Invalid object');
    var keys = [];
    for (var key in obj)
        if (Object.prototype.hasOwnProperty.call(obj, key))
            keys[keys.length] = key;
    return keys;
}

//把组合的key放入结果集SKUResult
function add2SKUResult(combArrItem, sku) {
//    var key = combArrItem.join(",");
    if (SKUResult[combArrItem]) {//SKU信息key属性·
//        SKUResult[key].count += sku.count;
        SKUResult[combArrItem].prices.push(sku.skuPrice);
    } else {
        SKUResult[combArrItem] = {
            prices: [sku.skuPrice]
        };
    }
}

//初始化得到结果集
function initSKU() {
    var i, j, skuKeys = getObjKeys(data);
//    console.log(skuKeys);
    for (i = 0; i < skuKeys.length; i++) {
        var skuKey = skuKeys[i];//一条SKU信息key
        var sku = data[skuKey]; //一条SKU信息value
        var skuKeyAttrs = skuKey.split(","); //SKU信息key属性值数组
        var skuorder = [];
        var skuKeyNew;
//        var len = skuKeyAttrs.length;



        //对每个SKU信息key属性值进行拆分组合
//        var combArr = arrayCombine(skuKeyAttrs);
        for (j = 0; j < skuKeyAttrs.length; j++) {  //将数组的key进行拆分、排序、重组
            skuorder.push(skuKeyAttrs[j]);
            skuorder.sort(function(a, b) {
                return parseInt(a) - parseInt(b);
            });

//            add2SKUResult(skuKeys[j], sku);
        }
        skuKeyNew = skuorder.join(",");
//        console.log(skuKeyNew);
//        console.log(sku);

        //结果集接放入SKUResult
        SKUResult[skuKeyNew] = {
            prices: sku
        }
    }
//    console.log(SKUResult);
}

/**
 * 从数组中生成指定长度的组合
 */
function arrayCombine(targetArr) {
    if (!targetArr || !targetArr.length) {
        return [];
    }

    var len = targetArr.length;
    var resultArrs = [];

    // 所有组合
    for (var n = 1; n < len; n++) {
        var flagArrs = getFlagArrs(len, n);
        while (flagArrs.length) {
            var flagArr = flagArrs.shift();
            var combArr = [];
            for (var i = 0; i < len; i++) {
                flagArr[i] && combArr.push(targetArr[i]);
            }
            resultArrs.push(combArr);
        }
    }

    return resultArrs;
}


/**
 * 获得从m中取n的所有组合
 */
function getFlagArrs(m, n) {
    if (!n || n < 1) {
        return [];
    }

    var resultArrs = [],
            flagArr = [],
            isEnd = false,
            i, j, leftCnt;

    for (i = 0; i < m; i++) {
        flagArr[i] = i < n ? 1 : 0;
    }

    resultArrs.push(flagArr.concat());

    while (!isEnd) {
        leftCnt = 0;
        for (i = 0; i < m - 1; i++) {
            if (flagArr[i] == 1 && flagArr[i + 1] == 0) {
                for (j = 0; j < i; j++) {
                    flagArr[j] = j < leftCnt ? 1 : 0;
                }
                flagArr[i] = 0;
                flagArr[i + 1] = 1;
                var aTmp = flagArr.concat();
                resultArrs.push(aTmp);
                if (aTmp.slice(-n).join("").indexOf('0') == -1) {
                    isEnd = true;
                }
                break;
            }
            flagArr[i] == 1 && leftCnt++;
        }
    }
    return resultArrs;
} 